package dao;

import java.util.LinkedList;
import java.util.List;

import relations.Participate;

public class ParticipateDAO 
{
	private static final ParticipateDAO instance = new ParticipateDAO();
	private List<Participate> participateList;
	
	private ParticipateDAO(){
		participateList = new LinkedList<Participate>();
		Participate par = null;
		
		//Album relations
		par = Participate.newInstance("Singer", 1L, 1L);
		participateList.add(par);
		par =  Participate.newInstance("Band", 2L, 2L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 3L, 3L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 4L, 4L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 5L, 5L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 6L, 6L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 7L, 7L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 8L, 8L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 9L, 9L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 10L, 10L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 11L, 11L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 12L, 12L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 13L, 13L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 14L, 14L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 15L, 15L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 16L, 16L);
		participateList.add(par);
		par =  Participate.newInstance("Singer", 17L, 17L);
		participateList.add(par);
		
		//Song relations
		par =  Participate.newInstance("Band", 500L, 500L);
		participateList.add(par);
		par =  Participate.newInstance("Single", 501L, 501L);
		participateList.add(par);
		
		//video relations
		par =  Participate.newInstance("Actor", 1000L, 1000L);
		participateList.add(par);
		par =  Participate.newInstance("Actor", 1001L, 1001L);
		participateList.add(par);
		par =  Participate.newInstance("Actor", 1002L, 1002L);
		participateList.add(par);
	}
	
	public static ParticipateDAO getInstance() {
		return instance;
	}

	public synchronized Participate findParticipate(Long product_id, Long a_id) {
		Participate result = null;
		
		for (Participate s : participateList){
			if (s.getProduct_id().equals(product_id) && s.getA_id().equals(a_id)){
				result = s;
			}
		}
		return result;
	}

	public synchronized void addParticipate(Participate obj) throws RecordDuplicateException{
		if (findParticipate(obj.getProduct_id(), obj.getA_id()) != null){
			throw new RecordDuplicateException("Participate with product id: " + obj.getProduct_id()
					+ ", artist id: " + obj.getA_id()  
					+ ", and role: " + obj.getRole() + " is already in the db.");
		}
		else {
			participateList.add(obj);
		}
	}
}
